package service;

import model.StudentProfile;
import utils.DatabaseUtil;
import java.sql.*;

public class StudentProfileService {

    /**
     * 根据用户ID获取学生详细信息
     *
     * @param userId 学生的唯一用户ID
     * @return 返回一个包含学生详细信息的StudentProfile对象，如果未找到则返回null
     */
    public StudentProfile getStudentProfile(int userId) {
        // SQL查询语句，从students表中获取学生信息，并通过LEFT JOIN获取班级、专业和院系名称
        String sql = "SELECT s.*, c.class_name, m.major_name, d.dept_name " +
                "FROM students s " +
                "LEFT JOIN classes c ON s.class_id = c.id " +
                "LEFT JOIN majors m ON c.major_code = m.major_code " +
                "LEFT JOIN departments d ON m.dept_code = d.dept_code " +
                "WHERE s.user_id = ?";

        try (Connection conn = DatabaseUtil.getConnection(); // 获取数据库连接
             PreparedStatement stmt = conn.prepareStatement(sql)) { // 创建预编译SQL语句对象

            stmt.setInt(1, userId); // 设置查询参数，即用户ID
            ResultSet rs = stmt.executeQuery(); // 执行查询

            // 如果查询结果集非空，则读取数据并填充到StudentProfile对象中
            if (rs.next()) {
                StudentProfile profile = new StudentProfile();
                profile.setId(rs.getInt("id"));
                profile.setStudentNo(rs.getString("student_no"));
                profile.setName(rs.getString("name"));
                profile.setGender(rs.getString("gender"));
                profile.setClassName(rs.getString("class_name"));
                profile.setMajorName(rs.getString("major_name"));
                profile.setDepartmentName(rs.getString("dept_name"));
                profile.setEnrollmentYear(rs.getInt("enrollment_year"));
                profile.setPhone(rs.getString("phone"));
                profile.setEmail(rs.getString("email"));
                profile.setBirthDate(rs.getDate("birth_date"));
                profile.setHomeAddress(rs.getString("home_address"));
                return profile; // 返回填充好的StudentProfile对象
            }
        } catch (SQLException e) {
            e.printStackTrace(); // 打印SQL异常信息
        }
        return null; // 如果未找到学生信息则返回null
    }

    /**
     * 更新学生的基本信息，包括电话、邮箱、出生日期和家庭住址
     *
     * @param profile 包含新信息的StudentProfile对象
     * @return 如果更新成功则返回true，否则返回false
     */
    public boolean updateStudentProfile(StudentProfile profile) {
        // SQL更新语句，用于更新students表中的学生信息
        String sql = "UPDATE students SET " +
                "phone = ?, email = ?, birth_date = ?, home_address = ? " +
                "WHERE id = ?";

        try (Connection conn = DatabaseUtil.getConnection(); // 获取数据库连接
             PreparedStatement stmt = conn.prepareStatement(sql)) { // 创建预编译SQL语句对象

            stmt.setString(1, profile.getPhone()); // 设置更新参数：电话
            stmt.setString(2, profile.getEmail()); // 设置更新参数：邮箱
            // 设置更新参数：出生日期，如果日期不为空则转换为java.sql.Date类型，否则设置为null
            stmt.setDate(3, profile.getBirthDate() != null ?
                    new java.sql.Date(profile.getBirthDate().getTime()) : null);
            stmt.setString(4, profile.getHomeAddress()); // 设置更新参数：家庭住址
            stmt.setInt(5, profile.getId()); // 设置更新条件：学生ID

            return stmt.executeUpdate() > 0; // 执行更新操作，并根据受影响的行数判断更新是否成功
        } catch (SQLException e) {
            e.printStackTrace(); // 打印SQL异常信息
            return false; // 如果更新失败则返回false
        }
    }
}
